from collections import defaultdict
from typing import List


class Solution:
    def minSwaps(self, nums: List[int]) -> int:
        # 寻找1之间有多少个 0
        # 用定长滑窗，先统计数组总共有多少个1记为k，k作为窗口长度，遍历这个长度下，最少有多少个0
        # 环形数组，初始化窗口为最后k个元素的前k-1元素（不包含包含最后一个元素），然后滑动窗口，添加右区间元素，移除左区间元素
        k=sum(nums)
        s=max_s=sum(nums[-k:-1])    # 初始化长度为k-1的窗口

        for i in range(len(nums)):  # 遍历右开边界 0——n-1
            s+=nums[i-1]            # 此时窗口长度为k，右开边界为i
            max_s=max(max_s,s)      # 更新答案
            s-=nums[i-k]            # 移除窗口左边界的值
        return k-max_s
